﻿// 
// Copyright (c) Microsoft. All rights reserved.
// Licensed under the MIT license.
// 
// Microsoft Cognitive Services: http://www.microsoft.com/cognitive
// 
// Microsoft Cognitive Services Github:
// https://github.com/Microsoft/Cognitive
// 
// Copyright (c) Microsoft Corporation
// All rights reserved.
// 
// MIT License:
// Permission is hereby granted, free of charge, to any person obtaining
// a copy of this software and associated documentation files (the
// "Software"), to deal in the Software without restriction, including
// without limitation the rights to use, copy, modify, merge, publish,
// distribute, sublicense, and/or sell copies of the Software, and to
// permit persons to whom the Software is furnished to do so, subject to
// the following conditions:
// 
// The above copyright notice and this permission notice shall be
// included in all copies or substantial portions of the Software.
// 
// THE SOFTWARE IS PROVIDED ""AS IS"", WITHOUT WARRANTY OF ANY KIND,
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
// 

using System.Linq;
using System.Runtime.InteropServices.WindowsRuntime;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;

namespace IntelligentKioskSample.Views.FormRecognizer
{
    public sealed partial class HighlightField : UserControl
    {
        public static readonly DependencyProperty LabelFieldProperty =
            DependencyProperty.Register(
            "LabelField",
            typeof(string),
            typeof(HighlightField),
            new PropertyMetadata(string.Empty)
            );

        public static readonly DependencyProperty ReceiptFieldProperty =
            DependencyProperty.Register(
            "ReceiptField",
            typeof(ReceiptItemUI),
            typeof(HighlightField),
            new PropertyMetadata(null)
            );

        public static readonly DependencyProperty NormalizeValueColumnLengthProperty =
            DependencyProperty.Register(
            "NormalizeValueColumnLength",
            typeof(GridLength),
            typeof(HighlightField),
            new PropertyMetadata(new GridLength(0.5, GridUnitType.Star))
            );

        public string LabelField
        {
            get { return (string)GetValue(LabelFieldProperty); }
            set { SetValue(LabelFieldProperty, value); }
        }

        public ReceiptItemUI ReceiptField
        {
            get { return (ReceiptItemUI)GetValue(ReceiptFieldProperty); }
            set { SetValue(ReceiptFieldProperty, value); }
        }

        public GridLength NormalizeValueColumnLength
        {
            get { return (GridLength)GetValue(NormalizeValueColumnLengthProperty); }
            set { SetValue(NormalizeValueColumnLengthProperty, value); }
        }

        public string FieldValue
        {
            get { return ReceiptField?.OverlayInfo != null ? string.Join(" ", ReceiptField.OverlayInfo.Select(x => x.EntityExt.Name).ToArray()) : string.Empty; }
            set
            {
                if (!string.IsNullOrEmpty(value) && value != FieldValue)
                {
                    ReceiptField = new ReceiptItemUI() { ReceiptItem = ReceiptField.ReceiptItem };
                    ReceiptField.OverlayInfo = new Controls.Overlays.TextOverlayInfo[]
                    {
                        new Controls.Overlays.TextOverlayInfo(ReceiptField.ReceiptItem.Text, ReceiptField.ReceiptItem.BoundingBox)
                    };
                }
            }
        }

        public HighlightField()
        {
            this.InitializeComponent();
        }
    }
}
